import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
const state = {
    // 数据持久化 
    token: getToken(), //本地token获取 默认值
    UserInfo: {}, //用户信息 空对象 不是null因为设置getters 要. null.报错 
}
const mutations = {
    // 修改state token
    setVuexToken(state, token) {
        state.token = token //修改vuextoken
        setToken(token) //本地缓存
    },
    // 删除token
    removeVuexToken(state) {
        state.token = null
        removeToken()
    },
    // 设置用户信息
    setUserInfo(state, UserInfo) {
        state.UserInfo = UserInfo

    },
    // 删除用户信息 退出登录的时候调用
    removeUserInfo(state) {
        state.UserInfo = {}

    }
}
const actions = {
    // 异步登录接口供组件使用
    async Vuexlogin(context, data) {
        const res = await login(data)

        context.commit('setVuexToken', res)
            //写入时间戳
        setTimeStamp()
    },
    //获取用户资料 接口getUserInfo
    async getUserInfov(context) {
        const res = await getUserInfo()
        const baseInfo = await getUserDetailById(res.userId)
        context.commit('setUserInfo', {...res, ...baseInfo })
        return res // 这里为什么要返回 现在看着是多余 为后面埋下伏笔  做权限管理
    },
    // 退出登录
    logout(context) {
        //    删除token
        context.commit('removeVuexToken')
            // 删除用户资料
        context.commit('removeUserInfo')
            // 重置路由路由表
        resetRouter()
            // permission里的routes 也重置 菜单栏
            // 子调子 调用其他模块的方法 开启了命名空间
        context.commit('permission/setRoutes', [], { root: true })
    }
}
export default {
    namespaced: true,
    state,
    mutations,
    actions
}